﻿//***********************************************************************************
// 文件名称：HandlerGetRank
// 功能描述：获取排行榜接口
// 数据表：
// 作者：liuxiaohu
// 日期：2017/3/13 9:12:20
// 修改记录：
//***********************************************************************************

using System;
using System.Web;
using System.Collections.Generic;

namespace GameServerService
{
    using GameServer;

    /// <summary>
    /// HandlerGetRank 的摘要说明
    /// </summary>
    public class HandlerGetRank : IHttpHandler
    {
        /// <summary>
        /// 接收Http请求并处理
        /// </summary>
        /// <param name="context">收到的请求</param>
        public void ProcessRequest(HttpContext context)
        {
            String resultMessage = String.Empty;

            try
            {
                // 解析参数
                Int32 playerId = Convert.ToInt32(context.Request["playerId"]);

                // 处理数据
                RankInfo rankInfo = GetRankInfo(playerId);

                // 转换为需要的数据
                resultMessage = GameServer.JsonHelper.ObjectToJson(rankInfo);
            }
            catch (Exception e)
            {
                // 日志记录错误信息
                LOG.Write("ERROR:" + e.Message);

                resultMessage = e.Message;
            }
            finally
            {
                context.Response.Write(resultMessage);
            }
        }

        /// <summary>
        /// 获取一个值，该值指示其他请求是否可以使用 IHttpHandler 实例
        /// </summary>
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

        /// <summary>
        /// 获取玩家积分和排行榜信息
        /// </summary>
        /// <param name="playerId">玩家Id</param>
        /// <returns>积分和排行信息</returns>
        private RankInfo GetRankInfo(Int32 playerId)
        {
            // 获取玩家积分
            Int32 score = GameServer.Global.PlayerMgr.GetScoreFromId(playerId);

            //获取排行榜列表
            List<Rank> rankList = GameServer.Global.RankMgr.GetTop20RankList();

            return new RankInfo(rankList, score);
        }
    }
}